package config

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"
)

type GitConfig struct {
	Platform string `json:"platform"`
	RepoURL  string `json:"repo_url"`
	Branch   string `json:"branch"`
	Enabled  bool   `json:"enabled"`
	Group    string `json:"group"`
}

type Config struct {
	Configs []GitConfig `json:"configs"`
}

func SaveConfig(configs []GitConfig) error {
	configDir, err := os.UserConfigDir()
	if err != nil {
		return err
	}

	configPath := filepath.Join(configDir, "git-push-tool", "config.json")

	// 确保目录存在
	err = os.MkdirAll(filepath.Dir(configPath), 0755)
	if err != nil {
		return err
	}

	file, err := os.Create(configPath)
	if err != nil {
		return err
	}
	defer file.Close()

	return json.NewEncoder(file).Encode(Config{Configs: configs})
}

func LoadConfig() ([]GitConfig, error) {
	configDir, err := os.UserConfigDir()
	if err != nil {
		return nil, err
	}

	configPath := filepath.Join(configDir, "git-push-tool", "config.json")

	file, err := os.Open(configPath)
	if err != nil {
		if os.IsNotExist(err) {
			return []GitConfig{}, nil
		}
		return nil, err
	}
	defer file.Close()

	var config Config
	if err := json.NewDecoder(file).Decode(&config); err != nil {
		return nil, err
	}

	return config.Configs, nil
}

func (c *GitConfig) Validate() error {
	if c.Platform == "" {
		return fmt.Errorf("平台名称不能为空")
	}
	if c.RepoURL == "" {
		return fmt.Errorf("仓库URL不能为空")
	}
	if c.Branch == "" {
		return fmt.Errorf("分支名称不能为空")
	}
	return nil
}
